package com.sykj.cloud.log.service.impl;

import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.sykj.cloud.common.core.constant.CacheConstants;
import com.sykj.cloud.common.core.utils.DateUtils;
import com.sykj.cloud.common.core.utils.IdUtils;
import com.sykj.cloud.common.core.utils.ServletUtils;
import com.sykj.cloud.common.core.utils.ip.IpUtils;
import com.sykj.cloud.common.security.utils.SecurityUtils;
import com.sykj.cloud.log.mapper.LogErrorMapper;
import com.sykj.cloud.log.service.ILogErrorService;
import com.sykj.cloud.system.api.domain.LogError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 用户日志Service业务层处理
 *
 * @author mr.will
 * @date 2021-03-31
 */
@Service
public class LogErrorServiceImpl implements ILogErrorService
{
    @Autowired
    private LogErrorMapper logErrorMapper;

    /**
     * 新增用户日志
     *
     * @param log 用户日志
     * @return 结果
     */
    @Override
    public int insertLogError(LogError log)
    {
        log.setGuid(IdUtils.fastSimpleUUID());
        log.setOperateTime(DateUtils.getNowDate());

        HttpServletRequest request = ServletUtils.getRequest();
        String ip = IpUtils.getIpAddr(request);
        String username = request.getHeader(CacheConstants.DETAILS_USERNAME);

        String methodName = null;

        String className = new Object() {
            public String getClassName() {
                String clazzName = this.getClass().getName();
                return clazzName.substring(0, clazzName.lastIndexOf('$'));
            }
        }.getClassName();


        // 请求的地址
        log.setIpAddress(ip);
        // 操作时间
        log.setOperateTime(DateUtils.getNowDate());
        // 操作用户Id
        log.setUserId(SecurityUtils.getUserIds());
        // 返回参数
//        log.setJsonResult(JSON.toJSONString(jsonResult));
        // 请求接口路径
        log.setOperUrl(ServletUtils.getRequest().getRequestURI());
        // 请求方法
        log.setMethod(className + "." + methodName + "()");

        // 请求方式
        log.setRequestMethod(ServletUtils.getRequest().getMethod());
        // 处理设置注解上的参数
//        getControllerMethodDescription(joinPoint, controllerLog, log);

        // 设置浏览器信息
        String UA=request.getHeader("User-Agent");
        log.setUserAgent(UA);
        UserAgent ua = UserAgentUtil.parse(UA);
        // 设置浏览器类型
        log.setBrowserType(ua.getBrowser().toString());
        log.setDeviceOs(ua.getPlatform().toString());
        return logErrorMapper.insertLogError(log);
    }

    /**
     * 修改用户日志
     *
     * @param logError 用户日志
     * @return 结果
     */
    @Override
    public int updateLogError(LogError logError)
    {
        return logErrorMapper.updateLogError(logError);
    }

    /**
     * 批量删除用户日志
     *
     * @param guids 需要删除的用户日志ID
     * @return 结果
     */
    @Override
    public int deleteLogErrorByIds(String[] guids)
    {
        return logErrorMapper.deleteLogErrorByIds(guids);
    }

    /**
     * 删除用户日志信息
     *
     * @param guid 用户日志ID
     * @return 结果
     */
    @Override
    public int deleteLogErrorById(String guid)
    {
        return logErrorMapper.deleteLogErrorById(guid);
    }

    /**
     * 查询用户日志
     *
     * @param guid 用户日志ID
     * @return 用户日志
     */
    @Override
    public LogError getLogErrorById(String guid)
    {
        return logErrorMapper.getLogErrorById(guid);
    }

    /**
     * 查询用户日志列表
     *
     * @param logError 用户日志
     * @return 用户日志
     */
    @Override
    public List<LogError> listLogErrors(LogError logError)
    {
        return logErrorMapper.listLogErrors(logError);
    }
}
